from flask import Flask
from config import Config
import os
import logging
import time
import glob
from datetime import datetime, timedelta
from app.extensions import db, login_manager

def create_app():
    app = Flask(__name__, 
                template_folder='templates')  # 确保模板目录正确
    
    # 配置日志
    os.makedirs('logs', exist_ok=True)
    log_file = f'logs/app_{time.strftime("%Y%m%d")}.log'
    
    file_handler = logging.FileHandler(log_file)
    file_handler.setLevel(logging.INFO)
    app.logger.addHandler(file_handler)
    app.logger.setLevel(logging.INFO)
    
    # 记录启动信息
    app.logger.info("="*50)
    app.logger.info("舆情监控系统正在启动...")
    app.logger.info(f"运行模式: {'开发' if app.debug else '生产'}")
    app.logger.info(f"日志级别: {logging.getLevelName(app.logger.level)}")
    app.logger.info(f"启动时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    app.logger.info(f"日志文件: {log_file}")
    app.logger.info("="*50)
    app.logger.info(f"app.root_path: {app.root_path}")
    
    # 清理旧日志
    clean_old_logs(app)
    
    # 创建数据目录
    db_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data')
    os.makedirs(db_dir, exist_ok=True)
    
    # 设置数据库路径
    db_path = os.path.join(db_dir, 'database.db')
    
    # 配置
    app.config.from_object(Config)
    app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SECRET_KEY'] = os.urandom(24)  # 添加安全密钥
    
    # 初始化扩展
    db.init_app(app)
    login_manager.init_app(app)
    login_manager.login_view = 'auth.login'
    
    # 注册蓝图
    from .user_interface.views import views
    app.register_blueprint(views)
    
    from .user_interface.api import api_blueprint
    app.register_blueprint(api_blueprint, url_prefix='/api')
    
    # 暂时注释掉auth蓝图，因为我们还没有完全实现它
    # from .auth.routes import auth_bp
    # app.register_blueprint(auth_bp)
    
    # 创建数据库表
    with app.app_context():
        db.create_all()
    
    return app

def clean_old_logs(app):
    """清理旧的日志文件"""
    try:
        # 获取所有日志文件
        log_files = glob.glob('logs/app_*.log*')
        
        # 如果日志文件超过30个，删除最旧的
        if len(log_files) > 30:
            # 按修改时间排序
            log_files.sort(key=lambda x: os.path.getmtime(x))
            # 删除最旧的文件，直到只剩30个
            for file in log_files[:-30]:
                os.remove(file)
                app.logger.info(f"已删除旧日志文件: {file}")
        
        # 删除30天前的日志文件
        thirty_days_ago = datetime.now() - timedelta(days=30)
        for file in log_files:
            file_time = datetime.fromtimestamp(os.path.getmtime(file))
            if file_time < thirty_days_ago:
                os.remove(file)
                app.logger.info(f"已删除30天前的日志文件: {file}")
    
    except Exception as e:
        app.logger.error(f"清理日志文件时出错: {str(e)}")

# 确保导出所需的模块
from .data_processing.report_generator import (
    ReportGenerator,
    generate_daily_report,
    generate_weekly_report,
    generate_monthly_report,
    generate_custom_report
)

__all__ = [
    'create_app',
    'db',
    'login_manager',
    'ReportGenerator',
    'generate_daily_report',
    'generate_weekly_report',
    'generate_monthly_report',
    'generate_custom_report'
] 